<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>复习</title>
</head>
<body>
    
<!-- 
    数据类型
        1.分类  
            基本（值）类型
                Number      任意数值
                String      任意字符串
                Boolean     true false
                undefined   undefined
                null        null
            对象（引用）类型
                Object      任意对象
                Function    特别的对象（可以执行）
                Array       特别的对象（内部数据有序，数字下标）
        2.判断 
            typeof
                能判断：
                    数值/字符串/布尔值/undefined/function
                不能判断：
                    null 和 Object / Object和array
            instanceof
                判断对象的具体类型
            ===
                判断 undefined 和 null
            
        3.相关问题
            1.undefined与null的区别 ？  undefined 定义未赋值，null定义并赋值，值为null
            2.什么时候将变量赋值为null ？ 定义时赋值为null则表示要创建一个对象，结束时赋值则表示垃圾对象，要清理
            3.严格区分变量类型与数据类型 ？
            - 数据类型
                基本类型
                对象类型
            - 变量的类型（变量内存值的类型）
                基本类型：保存的就是基本类型的数据
                引用类型：保存的是地址值

    数据，变量与内存
        1.什么时数据？
            - 用来存储特定信息的就是数据
            - 具有可传递的基本特性
            - 万物皆为数据
        2.什么是内存？
            - 具有一定的存储空间，用来存储数据的临时空间
            - 一块内存包含两个数据
                内部存储的数据（一般数据/地址数据）
                内存地址值数据
            - 内存分类
                栈内存  全局变量，局部变量（空间较小）
                堆内存  对象（空间大）
            - 分配空间 ：var a
            - 释放空间 ：
        3.什么是变量？
            - 值可以变化的量，由变量名 与 变量值组成
            - 一个变量对应一块小内存，变量名用来查找到内存，变量就是内存中保存的内容
        4.内存数据变量三者之间的关系
            - 内存是一个容器，用来存储程序运行需要操作的数据
            - 变量是内存的标识，我们通过变量找到对应的内存，进而操作（读/写）内存中的数据

        相关问题
            - 关于赋值与变量的问题
                var a = xxx
                    xxx 是基本类型数据  存储数据 
                    xxx 是对象         存储内存地址
                    xxx 是变量         存储变量的值（基本值/地址值）
            - 关于引用变量赋值的问题
                2个引用变量指向同一个对象，通过一个引用变量修改对象内部数据，另一个引用变量也能看见
                    var a = {name:123} 
                    var b = a
                    a.name = 456
                    console.log(b.name) // 456
                2个引用变量指向同一个对象，让一个引用变量指向另一个对象，另一个引用变量的指向不变
                    var a = {age:12}
                    var b = a
                    a = {name:'BoB',age:13}
                    console.log(b.age) // 12
                    b.age = 18
                    console.log(b.age, a.name, a.age) // 18  BoB  13
            - 关于数据传递的问题

            - JS引擎如何管理内存

    对象
        1.什么是对象？
            - 代表现实中某个事物，是该事物在编程中的抽象
            - 多个数据的集合体（封装体）
            - 用于保存多个数据的容器
        2.为什么要用对象？
            - 便于多个数据进行统一管理
        3.对象的组成？
            - 属性
                代表显示事物的状态数据
                由属性名和属性值组成
                属性名都是字符串类型，属性值是任意类型
            - 方法
                代表显示事物的行为数据
                是特别的属性 --》 属性值是函数
        4.如何访问对象内部数据？
            - .属性名：编码简单，但有时不能用
            - ['属性名'] ：编码麻烦，但通用
                var a = 'abc'
                var b = 18
                var c[a] = b == /var c.a =b/ 且 a 是变量 /c[a] == c.abc/
        相关问题

    函数
        1.什么是函数 ？
            - 具有特定功能的 n 条语句的封装提
            - 只有函数是可执行的，其他类型的数据是不可执行的
            - 函数也是对象
        2.为什么要用函数 ？
            - 提高代码复用
            - 便于阅读和交流
        3.如何定义函数 ？   
            - 函数声明
            - 表达式
        4.如何调用（执行）函数 ？
            - test()
            - new test()
            - obj.test()
            - test.call/apply(obj)
        5.回调函数 ？
            - 什么是回调函数
                1.自己定义的
                2.自己没调用
                3.最后执行了
            - 常见的回调函数
                dom 事件回调函数
                定时器回调函数

        6.IIFE ？
            1.理解
                - 全称：立即调用函数表达式 
                - 别名：匿名函数自调用
            2.作用
                - 隐藏内部实现
                - 不污染全局命名空间
        7.函数中的this ？

 -->

<script type="text/javascript">
    var a = {age:12}
    var b = a
    a = {name:'BoB',age:13}
    b.age = 18
    console.log(b.age, a.name, a.age) //18  BoB  13

    var a = 'abc'
    var b = 18
    var c ={} // c = { abc:18(b) }
    c[a] = b // c.abc = 18(b)
    console.log(c[a],c.abc,)
    
</script>
</body>
</html>